package chapter10.innerclass;

//局部内部类

public class LocalInnerClass {
    public static void main(String[] args) {
        Outer02 outer02 = new Outer02();
        outer02.m1();
        System.out.println("hashcode"+outer02.hashCode());
//        Inner02 inner02 = new Inner02(); 不能访问，因为内部类相当于一个局部变量
    }
}

class Outer02 {
    private int n1 = 10;

    private void m2() {
        System.out.println("hello world!");
    }


    public void m1() {//方法
        //1.局部内部类是定义在，外部类的局部位置，通常在方法,本质还是一个类。
        //2.可以访问外部类的所有成员，包含私有的，直接访问
        //3.不能添加访问修饰符，但是可以使用final修饰
        //4.作用域:仅仅在定义它的方法或代码块中
        //5.外部类在定义该内部类的方法中，可以创建该类的实例，然后直接调用方法即可
        class Inner02 {
            int  n1 = 800;
            public void f1() {

                System.out.println("n1=" + n1);
             //如果内部类和外部类成员重名，遵循就近原则，如果要访问外部类的成员可以用 外部类名.this.成员
            //本质就是外部类的对象,即哪个对象调用了该方法，外部类名.this 指的就是哪个对象
                System.out.println("outer.n1 = "+ Outer02.this.n1 );
                System.out.println("hashcode"+Outer02.this.hashCode());
                m2();
            }
        }
        Inner02 inner02 = new Inner02();
        inner02.f1();
        class Inner03 extends Inner02 {

        }
    }
}